export const getDatesForNextDays = (daysCount) => {
  let datesArray = [];
  for (let i = 0; i < daysCount; i++) {
    // 创建一个新的 Date 对象，表示当前日期加上i天
    let currentDate = new Date();
    currentDate.setDate(currentDate.getDate() + i);

    // 格式化日期为 YYYY-MM-DD
    let year = currentDate.getFullYear();
    let month = String(currentDate.getMonth() + 1).padStart(2, "0"); // 月份从0开始所以要+1
    let day = String(currentDate.getDate()).padStart(2, "0");

    // 添加格式化后的日期到数组中
    datesArray.push(`${year}-${month}-${day}`);
  }
  return datesArray;
};

export const getDatesFromDayPlusDays = (startDay, additionalDays) => {
  let datesArray = [];
  for (let i = 0; i <= additionalDays; i++) {
    // 创建一个新的 Date 对象，表示当前日期加上startDay + i天
    let currentDate = new Date();
    // 因为每次循环都会创建新的Date对象，所以不需要担心日期累加问题
    currentDate.setDate(currentDate.getDate() + startDay + i);

    // 格式化日期为 YYYY-MM-DD
    let year = currentDate.getFullYear();
    let month = String(currentDate.getMonth() + 1).padStart(2, "0"); // 月份从0开始所以要+1
    let day = String(currentDate.getDate()).padStart(2, "0");

    // 添加格式化后的日期到数组中
    datesArray.push(`${year}-${month}-${day}`);
  }
  return datesArray;
};

export const isTimeRangePassed = (timeRange) => {
  // 获取当前时间
  let now = new Date();
  let currentHour = now.getHours();
  let currentMinute = now.getMinutes();

  // 解析传入的时间范围字符串为开始时间和结束时间
  let [startTime, endTime] = timeRange.split("-");
  let [startHour, startMin] = startTime.split(":").map(Number);
  let [endHour, endMin] = endTime.split(":").map(Number);

  // 创建开始时间和结束时间的Date对象，使用今天的日期
  let startDate = new Date(
    now.getFullYear(),
    now.getMonth(),
    now.getDate(),
    startHour,
    startMin
  );
  let endDate = new Date(
    now.getFullYear(),
    now.getMonth(),
    now.getDate(),
    endHour,
    endMin
  );

  // 如果结束时间早于开始时间，则认为该时间段跨天
  if (endDate < startDate) {
    // 对于跨天的情况，将结束时间设置为第二天
    endDate.setDate(endDate.getDate() + 1);
  }

  // 获取当前时间的Date对象
  let currentDate = new Date(
    now.getFullYear(),
    now.getMonth(),
    now.getDate(),
    currentHour,
    currentMinute
  );

  // 判断当前时间是否在这个时间段之外
  return currentDate >= endDate;
};

export const addOneHourToTime = (timeString, hoursParams) => {
  // 解析传入的时间字符串为 Date 对象
  let [datePart, timePart] = timeString.split(" ");
  let [hours, minutes] = timePart.split(":");
  let date = new Date(
    `${datePart}T${hours.padStart(2, "0")}:${minutes.padStart(2, "0")}`
  );

  // 增加一个小时
  date.setHours(date.getHours() + hoursParams);

  // 格式化日期为 YYYY-MM-DD HH:mm
  let newYear = date.getFullYear();
  let newMonth = String(date.getMonth() + 1).padStart(2, "0"); // 月份从0开始所以要+1
  let newDay = String(date.getDate()).padStart(2, "0");
  let newHours = String(date.getHours()).padStart(2, "0");
  let newMinutes = String(date.getMinutes()).padStart(2, "0");

  return `${newYear}-${newMonth}-${newDay} ${newHours}:${newMinutes}`;
};

export const addOneMinuteToTime = (timeString, Minutes) => {
  // 解析传入的时间字符串为 Date 对象
  let date = new Date(timeString.replace(" ", "T"));

  // 增加一分钟
  date.setMinutes(date.getMinutes() + Minutes);

  // 格式化日期为 YYYY-MM-DD HH:mm
  let newYear = date.getFullYear();
  let newMonth = String(date.getMonth() + 1).padStart(2, "0"); // 月份从0开始所以要+1
  let newDay = String(date.getDate()).padStart(2, "0");
  let newHours = String(date.getHours()).padStart(2, "0");
  let newMinutes = String(date.getMinutes()).padStart(2, "0");

  return `${newYear}-${newMonth}-${newDay} ${newHours}:${newMinutes}`;
};

export const getCurrentAndNextHourTimes = () => {
  // 获取当前时间
  let now = new Date();

  // 创建一个新的 Date 对象表示当前时间加上1小时
  let nextHour = new Date(now);
  nextHour.setHours(nextHour.getHours() + 1);

  // 格式化日期为 YYYY-MM-DD HH:mm
  function formatDate(date) {
    let year = date.getFullYear();
    let month = String(date.getMonth() + 1).padStart(2, "0"); // 月份从0开始所以要+1
    let day = String(date.getDate()).padStart(2, "0");
    let hours = String(date.getHours()).padStart(2, "0");
    let minutes = String(date.getMinutes()).padStart(2, "0");

    return `${year}-${month}-${day} ${hours}:${minutes}`;
  }

  // 返回开始和结束时间
  return [formatDate(now), formatDate(nextHour)];
};

export const canBeScheduled = (timeRange, hours = 1) => {
  // 获取当前时间，并计算1小时后的预约开始时间
  let now = new Date();
  let oneHourLater = new Date(now);
  oneHourLater.setHours(oneHourLater.getHours() + hours);

  // 解析传入的时间范围字符串为开始时间和结束时间
  let [startTime, endTime] = timeRange.split("-");
  let [startHour, startMin] = startTime.split(":").map(Number);
  let [endHour, endMin] = endTime.split(":").map(Number);

  // 创建开始时间和结束时间的Date对象，使用今天的日期
  let startDate = new Date(
    now.getFullYear(),
    now.getMonth(),
    now.getDate(),
    startHour,
    startMin
  );
  let endDate = new Date(
    now.getFullYear(),
    now.getMonth(),
    now.getDate(),
    endHour,
    endMin
  );

  // 如果结束时间早于开始时间，则认为该时间段跨天
  if (endDate < startDate) {
    // 对于跨天的情况，将结束时间设置为第二天
    endDate.setDate(endDate.getDate() + 1);
  }

  // 检查开始时间是否在1小时后
  return startDate >= oneHourLater;
};

export const canBeScheduledMinutes = (timeRange, advanceMinutes) => {
  // 获取当前时间，并计算提前预约时间后的预约开始时间
  let now = new Date();
  let startTimeToSchedule = new Date(now);
  startTimeToSchedule.setMinutes(
    startTimeToSchedule.getMinutes() + advanceMinutes
  );

  // 解析传入的时间范围字符串为开始时间和结束时间
  let [startTime, endTime] = timeRange.split("-");
  let [startHour, startMin] = startTime.split(":").map(Number);
  let [endHour, endMin] = endTime.split(":").map(Number);

  // 创建开始时间和结束时间的Date对象，使用今天的日期
  let startDate = new Date(
    now.getFullYear(),
    now.getMonth(),
    now.getDate(),
    startHour,
    startMin
  );
  let endDate = new Date(
    now.getFullYear(),
    now.getMonth(),
    now.getDate(),
    endHour,
    endMin
  );

  // 如果结束时间早于开始时间，则认为该时间段跨天
  if (endDate < startDate) {
    // 对于跨天的情况，将结束时间设置为第二天
    endDate.setDate(endDate.getDate() + 1);
  }

  // 检查开始时间是否在提前预约时间之后
  return startDate >= startTimeToSchedule;
};
